// pages/mall/consultDetail/index.js
const $api = require('../../../../request/api').API;
const app = getApp();
const { getElementDs, getElement } = require('../../../../utils/util');
Page({
  /**
   * 页面的初始数据
   */
  data: {
    content: '',
    id: '',
    downNums: 0,
    upNums: 0,
    viewNums: 0,
    type: 0, //1表示已经点赞 2表示已经踩
    menuBtnTop: app.globalData.menuBtnTop,
    listData: []
    // listTop:0,
    // showBalance:false,
  },

  /**
   * 生命周期函数--监听页面加载
   */
  async onLoad(options) {
    const { id } = options;
    this.setData({
      id
    });
    await this.getData();
    this.consultPage = getCurrentPages().find(item => item.route == 'subcontract/home/pages/consult/index');
    const { leftList, rightList } = this.consultPage.data;
    this.target = leftList.find(item => item.libraryId == id) || rightList.find(item => item.libraryId == id);
    this.target.viewNums = this.data.viewNums;
    this.consultPage.setData({
      leftList,
      rightList
    });

    // 清空购物车
    wx.setStorageSync('shopCartData', JSON.stringify([]));
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {},

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {},
  back() {
    wx.navigateBack({
      delta: 1
    });
  },
  // 阻止冒泡
  stopBubble() {},
  async getData() {
    const res = await $api.getLibraryInfo({ id: this.data.id });
    let { downNums, upNums, content, viewNums, serverCodes } = res.data.data;
    const reg = /<a.*?<\/a>/gm; // 这里正则的匹配一定要注意*要使用惰性匹配，否则匹配的</a>就不是以一个了
    const reg2 = /\(s.d\)/gm;
    const arr = content.match(reg) || []; //匹配到的所以a标签
    const splitlist = content.split(/<a/);
    const styleArr = []; //按钮样式列表
    let str = '';
    arr.forEach(item => {
      if (reg2.test(item)) {
        // 存在按钮样式
        str = item.match(reg2)[0].replace(/\(s|d\)/g, '');
        styleArr.push('btn' + str);
      } else {
        // 不存在按钮样式
        styleArr.push('.default-btn');
      }
    });
    content = '';
    splitlist.forEach((item, index) => {
      if (index) {
        content = content + '<a class=' + styleArr[index - 1] + item;
      } else {
        content = item;
      }
    });
    content = content.replace(reg2, '');
    let type = 0;
    if (downNums < 0) {
      downNums = Math.abs(downNums);
      type = 2;
    } else if (upNums < 0) {
      upNums = Math.abs(upNums);
      type = 1;
    }
    this.setData({
      type,
      downNums,
      upNums,
      content,
      viewNums
      // listData:goodsList
    });
    if (serverCodes) this.getGoodsList(serverCodes);
  },
  async getGoodsList(serverCodes) {
    const { id } = this.data;

    const params = {
      queryType: app.globalData['btnList.queryType'],
      serverCodes,
      beeperId: app.globalData['btnList.beeperId'],
      libraryId: id
    };
    const res = await $api.listByLibrary(params);
    this.setData({
      listData: res.data.data || []
    });
  },
  async clickActions(e) {
    let { id, type, downNums, upNums } = this.data;
    if (type) return;
    type = e.currentTarget.dataset.type;
    await $api.clickActions({ id, type: type + 1 });
    this.setData({
      type,
      downNums: type == 2 ? ++downNums : downNums,
      upNums: type == 1 ? ++upNums : upNums
    });
    const { leftList, rightList } = this.consultPage.data;
    this.target.upNums = this.data.upNums;
    this.consultPage.setData({
      leftList,
      rightList
    });
  },
  handleTagATap(e) {
    console.log(e);
    // wx.navigateTo({
    //   url: '/subcontract/person/pages/h5Page/index?url=' + encodeURIComponent(e.detail.href),
    // })
    // "https://h5.kanglailab.com/nucleicLeaving"
  },
  // 去商品详情页面
  toGoodsDetail(e) {
    // orderSource为3表示资讯页购买下单
    const { goodsid, beeperBtnId } = e.currentTarget.dataset;
    let query = '?goodsId=' + goodsid + '&beeperBtnId=' + beeperBtnId + '&orderSource=' + 3;
    wx.navigateTo({
      url: '/subcontract/home/pages/goodsDetail/index' + query
    });
  },
  // // 添加
  // async addNum(e) {
  //   // 这里有三种情况，触发该函数
  //   // 1.事件绑定触发
  //   // 2.balance组件自定义事件触发
  //   // 3.goods-spec组件触发
  //   // 如果e.detail.goodsId存在那么就表示是子组件触发的这个函数
  //   let obj = null
  //   let variantId = null
  //   let indexArr = []
  //   const goodsId = e.detail.goodsId || e.currentTarget.dataset.item.goodsId
  //   if (this.timeOut(goodsId)) return
  //   if (e.detail.goodsId) {
  //     // 是goods-spec或者是balance组件调用的
  //     indexArr = this.getIndexsById(this.data.listData, e.detail.goodsId, "goodsId")
  //     const o = this.data.listData[indexArr[0]] || {}
  //     obj = { ...o, ...e.detail }
  //     e.currentTarget.dataset.item = {}
  //     e.currentTarget.dataset.item.variantId = e.detail.variantId
  //     if (indexArr.length) {
  //       // 可能有重复的数据
  //       indexArr.forEach(i => {
  //         this.data.listData[i].nums = this.data.listData[i].nums + e.detail.nums
  //       })
  //       this.setData({
  //         listData: this.data.listData,
  //       })
  //     }
  //   } else {
  //     const { item } = e.currentTarget.dataset
  //     // 事件绑定触发,这里需要判断有没有关联产品而且至少有没有添加一个
  //     let listData = this.data.listData
  //     variantId = item.variantId
  //     indexArr = this.getIndexsById(this.data.listData, variantId, "variantId")
  //     // 如果存在关联产品拉起选择关联产品的框框
  //     if (this.data.beeperId && item.relationFlag && !listData[indexArr[0]].nums) {
  //       let spec = this.data.spec
  //       spec.goodsId = item.goodsId
  //       spec.showSpec = true,
  //         this.setData({
  //           spec,
  //         })
  //       return
  //     } else {
  //       // 正常添加数据
  //       // 执行添加动画
  //       this.addAni(e.touches[0])
  //       indexArr.forEach(i => {
  //         listData[i].nums++
  //         this.setData({
  //           listData,
  //         })
  //       })
  //       obj = Object.assign({ ...listData[indexArr[0]] }, { nums: 1 })
  //     }
  //     // 判断是否在活动范围之内
  //     const goodsList = this.data.listData.filter(item => item.goodsId == goodsId)
  //     if (goodsList.length) {
  //       this.activeTime(goodsList)
  //     }
  //   }

  //   // 执行父组件的addNum方法也会执行子组件的addNum方法，子组件也会执行父组件的，所以必须要用一个属性来控制，否则会陷入死循环
  //   if (!e.detail.flag) {
  //     e.flag = true
  //     this.selectComponent("#balance").addNum(e, obj)
  //   }
  // },
  // // 添加动画
  // async addAni({ clientX, clientY }) {
  //   const res = await getElement("#balance>>>.shop-cart-img")
  //   console.log(res,194)
  //   const { top, right } = this.data.shopCartPosition
  //   this.setData({
  //     showDot: true,
  //     dotClientX: clientX - 4,
  //     dotClientY: clientY - 8,
  //   })
  //   wx.nextTick(() => {
  //     const addAnimation = wx.createAnimation().top(clientY - 20).left(clientX - 50).step({ duration: 100 }).top(top).left(right - 12).step({ duration: 100, timingFunction: 'ease-in' })
  //     this.setData({
  //       addAnimation: addAnimation.export()
  //     })
  //     setTimeout(() => {
  //       this.setData({
  //         showDot: false,
  //         addAnimation: null
  //       })
  //     }, 250)
  //   })

  // },
  // // 减少
  // subNum(e) {
  //   let indexArr = []
  //   const goodsId = e.detail.goodsId || e.currentTarget.dataset.item.goodsId
  //   if (this.timeOut(goodsId)) return

  //   if (e.detail.goodsId) {
  //     // index = this.getIndexById(this.data.listData, e.detail.goodsId, "goodsId")
  //     indexArr = this.getIndexsById(this.data.listData, e.detail.goodsId, "goodsId")
  //     e.currentTarget.dataset.item = {}
  //     e.currentTarget.dataset.item.variantId = e.detail.variantId
  //     if (indexArr.length > 0) {
  //       indexArr.forEach(i => {
  //         this.data.listData[i].nums--
  //       })
  //       this.setData({
  //         listData: this.data.listData,
  //       })
  //     }
  //   } else {
  //     // index = this.getIndexById(this.data.listData, e.currentTarget.dataset.item.variantId, "variantId")
  //     indexArr = this.getIndexsById(this.data.listData, e.currentTarget.dataset.item.variantId, "variantId")
  //     indexArr.forEach(i => {
  //       this.data.listData[i].nums--
  //     })

  //     this.setData({
  //       listData: this.data.listData,
  //     })
  //   }
  //   const goodsList = this.data.listData.filter(item => item.goodsId == goodsId)
  //   if (goodsList.length) {
  //     this.activeTime(goodsList)
  //   }
  //   if (!e.detail.flag) {
  //     e.flag = true
  //     this.selectComponent("#balance").subNum(e)
  //   }
  // },
  // // 清空数量
  // clear() {
  //   this.data.listData.forEach(item => item.nums = 0)
  //   this.setData({
  //     listData: this.data.listData
  //   })
  // },
  // // 判断哪些产品不在销售时间内
  // judgeTimeout() {
  //   const { listData } = this.data
  //   listData.forEach(item => {
  //     let res = null
  //     if (!item.goodsHours || item.goodsHours && !item.goodsHours.length) {
  //       return
  //     }
  //     res = item.goodsHours.some(item => {
  //       let time = new Date()
  //       let begin = new Date()
  //       let end = new Date()
  //       const arr = item.beginHours.split(":").map(item => Number(item))
  //       const arr2 = item.endHours.split(":").map(item => Number(item))
  //       begin.setHours(arr[0])
  //       begin.setMinutes(arr[1])
  //       end.setHours(arr2[0])
  //       end.setMinutes(arr2[1])
  //       return time.getTime() > begin.getTime() && time.getTime() < end.getTime()
  //     })
  //     if (!res) {
  //       item.saleState = 0
  //     }
  //   })
  //   this.setData({
  //     listData,
  //   })
  // },
  // // 判断是否在时间段内，如果不在就要是售罄的
  // timeOut(goodsId) {
  //   const { listData } = this.data
  //   let goods = listData.find(item => item.goodsId == goodsId)
  //   if (!goods) {
  //     // 如果列表里面没有的话就直接添加
  //     return false
  //   }
  //   if (!goods.goodsHours || goods.goodsHours && !goods.goodsHours.length) return
  //   const res = goods.goodsHours.some(item => {
  //     let time = new Date()
  //     let begin = new Date()
  //     let end = new Date()
  //     const arr = item.beginHours.split(":").map(item => Number(item))
  //     const arr2 = item.endHours.split(":").map(item => Number(item))
  //     begin.setHours(arr[0])
  //     begin.setMinutes(arr[1])
  //     end.setHours(arr2[0])
  //     end.setMinutes(arr2[1])
  //     return time.getTime() > begin.getTime() && time.getTime() < end.getTime()
  //   })
  //   if (!res) {
  //     // 售罄之后改变状态同时清空购物车里面售罄的该数据
  //     goods.nums = 0
  //     goods.saleState = 0
  //     this.setData({
  //       listData
  //     })
  //     this.selectComponent("#balance").timeOut(goodsId)
  //     return true
  //   } else {
  //     return false
  //   }
  // },
  // //需要判断是不是活动时间
  // activeTime(val) {
  //   val = Array.isArray(val) ? val : [val] //拼接一个数组好计算
  //   val.forEach(item => {
  //     if (!item.active) return
  //     let { beginDate, endDate, activePrice } = item.active
  //     beginDate = getDatetime(beginDate).getTime()
  //     endDate = getDatetime(endDate).getTime()
  //     let nowDate = new Date().getTime()
  //     if (nowDate > beginDate && nowDate < endDate) {
  //       item.activeDiscount = parseFloat(((activePrice / item.price) * 10).toFixed(2)) || 0.01
  //     } else {
  //       item.activeDiscount = ""
  //     }
  //   })
  // },
  // // 选择规格
  // selectSpec(e) {
  //   if (this.timeOut(e.currentTarget.dataset.item.goodsId)) return
  //   let item = e.currentTarget.dataset.item
  //   let spec = this.data.spec
  //   spec.goodsId = item.goodsId
  //   spec.showSpec = true
  //   this.setData({
  //     spec,
  //   })
  // },
  // // 通过商品id来获取对应的数组索引，不存在就返回-1,prop是对应的字符串,默认是id
  // getIndexById(arr, id, prop = "id") {
  //   let tempIndex = -1
  //   arr.find((item, index) => {
  //     if (item[prop] == id) {
  //       tempIndex = index
  //       return true
  //     }
  //   })
  //   return tempIndex
  // },
  // //  通过商品id来获取对应的数组索引数组
  // getIndexsById(arr, id, prop = "id") {
  //   const res = []
  //   arr.forEach((item, index) => {
  //     if (item[prop] == id) {
  //       res.push(index)
  //     }
  //   })
  //   return res
  // },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {},

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {},

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {},

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {},
  onPageScroll() {
    // const res = await getElement(".list")
    // this.setData({
    //   showBalance:res[0].top+120<app.globalData.screenHeight?true:false
    // })
  },
  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {}
});
